home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / TEMP / GNU / bison / Multifunct < prev    next >
Encoding:
Text File  |  1995-06-28  |  1.6 KB  |  56 lines

  1. Multi-function Calc
  2. Previous: <Simple Error Recovery=>SimpleErro> * Next: <Exercises=>Exercises> * Up: <Examples=>Examples>
  3.  
  4. #Wrap on
  5. {fH3}Multi-Function Calculator: {fCode}mfcalc{f}{f}
  6.  
  7. Now that the basics of Bison have been discussed, it is time to move on to
  8. a more advanced problem.  The above calculators provided only five
  9. functions, {fEmphasis}+{f}, {fEmphasis}-{f}, {fEmphasis}\*{f}, {fEmphasis}\/{f} and {fEmphasis}^{f}.  It would
  10. be nice to have a calculator that provides other mathematical functions such
  11. as {fCode}sin{f}, {fCode}cos{f}, etc.
  12.  
  13. It is easy to add new operators to the infix calculator as long as they are
  14. only single-character literals.  The lexical analyzer {fCode}yylex{f} passes
  15. back all non-number characters as tokens, so new grammar rules suffice for
  16. adding a new operator.  But we want something more flexible: built-in
  17. functions whose syntax has this form:
  18.  
  19. #Wrap off
  20. #fCode
  21. {fStrong}function\_name{f} ({fStrong}argument{f})
  22. #f
  23. #Wrap on
  24.  
  25. At the same time, we will add memory to the calculator, by allowing you
  26. to create named variables, store values in them, and use them later.
  27. Here is a sample session with the multi-function calculator:
  28.  
  29. #Wrap off
  30. #fCode
  31. % mfcalc
  32. pi = 3.141592653589
  33. 3.1415926536
  34. sin(pi)
  35. 0.0000000000
  36. alpha = beta1 = 2.3
  37. 2.3000000000
  38. alpha
  39. 2.3000000000
  40. ln(alpha)
  41. 0.8329091229
  42. exp(ln(beta1))
  43. 2.3000000000
  44. %
  45. #f
  46. #Wrap on
  47.  
  48. Note that multiple assignment and nested function calls are permitted.
  49.  
  50. #Wrap off
  51. <Decl=>MfcalcDecl>:      Bison declarations for multi-function calculator.
  52. <Rules=>MfcalcRule>:    Grammar rules for the calculator.
  53. <Symtab=>MfcalcSymt>:  Symbol table management subroutines.
  54. #Wrap on
  55.  
  56.